package map;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class MapDemo2 {
    public static void main(String[] args) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("语文", 100);
        map.put("英语", 80);
        map.put("数学", 12);
        map.put("物理", 68);
        map.put("化学", 80);
        System.out.println(map);

        /*
            遍历所有的key
            Set<K> keySet()
            将当前map中所有的key以一个集合形式返回,遍历这个集合就等于便利了所有的key
         */
        Set<String> keySet = map.keySet();
        for (String key : keySet){
            System.out.println("key:"+key);
        }

    /*
        遍历每一组键值对
        Set<Entry> entrySet()

        Map.Entry它的每一个实例用于表示Map中的一组键值对
        Entry有两个常用的方法:
        getKey(),getValue分别用于获取其表示的键值对中的key和value
     */
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for(Map.Entry<String,Integer> e :entrySet){
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key+":"+value);
        }
        Collection<Integer> values = map.values();
        for (Integer value: values){
            System.out.println("value:"+value);
        }
        /*
            在JDK
         */
//        keySet.forEach(new Consumer<String>() {
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
        keySet.forEach(s-> System.out.println(s));
        keySet.forEach(System.out::println);

//        map.forEach(new BiConsumer<String, Integer>(){
//            public void accept(String k, Integer v) {
//                System.out.println(k+":"+v);
//            }
//        });

        map.forEach((k,v)-> System.out.println(k+":"+v));

    }
}
